#ifndef LINKEDSTACK_H_INCLUDED
#define LINKEDSTACK_H_INCLUDED


/****************************************
 *  Project： LinkedStack 链栈操作
 *  Function:
 *  Description: 链栈操作
 *  Author: coder-itl
 ****************************************
 *  Copyright 2021/10/13 by coder-itl
 ****************************************/
#include "stdio.h"
#include "Element.h"

/**
 * 链栈的节点
 */
typedef struct StackNode {
    /* 节点中保存的元素 */
    ElementType data;
    /* 指向下个节点的指针 */
    struct StackNode *next;
} StackNode;

/**
 * 链栈结构
 */
typedef struct LinkedStack {
    /* 栈顶指针 */
    StackNode *top;
    /* 链栈的长度(元素个数) */
    int length;
} LinkedStack;

/**
 * 初始化链栈
 * @param linkedStack
 */
void InitLinkedStack(LinkedStack *linkedStack);

/**
 * 压栈并返回结果
 * @param linkedStack
 * @param element
 * @return
 */
int PushLinkedStack(LinkedStack *linkedStack, ElementType element);

/**
 * @param linkedStack
 * @param element
 * @return  * 返回 TRUE | FALSE
 */
int PopLinkedStack(LinkedStack *linkedStack, ElementType *element);

/**
 * 清空栈
 * @param linkedStack
 */
void ClearLinkedStack(LinkedStack *linkedStack);

/**
 * 销毁栈
 * @param linkedStack
 */
void DestroyLinkedStack(LinkedStack *linkedStack);

#endif // LINKEDSTACK_H_INCLUDED
